#include <bits/stdc++.h>
using namespace std;
const int N=250*250+50;
const int INF=0x3f3f3f3f;
int t,n,p,q,x;
int tag[N];
int a[N],g[N],d[N];
int main(void){
    scanf("%d",&t);
    for(int c=1;c<=t;c++){
        memset(a,0,sizeof(a));
        memset(g,0,sizeof(g));
        memset(d,0,sizeof(d));
        scanf("%d%d%d",&n,&p,&q);
        //标记a数列,类似离散化的思想
        for(int i=1;i<=p+1;i++){
            scanf("%d",&x);
            tag[x]=i;
        }
        n=0;
        for(int i=1;i<=q+1;i++){
            scanf("%d",&x);
            if(tag[x]){
                //构造b数列
                a[n++]=tag[x];
            }
        }
        //求b数列的lis
        int ans=0;
        //lis长度为i的最小数字
        for(int i=1;i<=n;i++){
            g[i]=INF;
        }
        for(int i=0;i<n;i++){
            int k=lower_bound(g+1,g+n+1,a[i])-g;
            d[i]=k;
            g[k]=a[i];
            ans=max(ans,d[i]);
        }
        printf("Case %d: %d\n",c,ans);
    }
    return 0;
}